package org.albertsanso.yoigo.shopchat.dao;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;

import org.albertsanso.yoigo.shopchat.dao.iface.ShopChatDao;
import org.albertsanso.yoigo.shopchat.dao.mapper.MensajeRowMapper;
import org.albertsanso.yoigo.shopchat.dao.mapper.TiendaRowMapper;
import org.albertsanso.yoigo.shopchat.model.Mensaje;
import org.albertsanso.yoigo.shopchat.model.Tienda;

public class ShopChatDaoImpl extends HttpGenericDaoImpl implements ShopChatDao {

	private static final String BASE_URL_QUERY = "http://www.yoigobcn.com/posyoigo";
	
	private static final String GET_TIENDA_ORIGEN = "/get_tienda_origen.php?telefono=%s";
	private static final String GET_DATOS_TIENDA = "/get_datos_tienda.php?tienda=%s";
	private static final String GET_TODAS_TIENDAS = "/get_todas_tiendas.php";
	private static final String HAY_MENSAJE = "/hay_mensaje.php?telefono=%s&tienda=%s";
	private static final String GET_CONVERSACION = "/get_conversacion.php?telefono=%s&tienda=%s";
	private static final String ENVIAR_CONSULTA = "/enviar_consulta.php?telefono=%s&tienda=%s&mensaje=%s";
	
	public String getTiendaByTelefono(String numeroTelefono) {
		
		String query = BASE_URL_QUERY + GET_TIENDA_ORIGEN;
		query = String.format(query, numeroTelefono);
		
		String response = "";
		try {
			response = makeHttpCall(query);
		} catch (IOException ioe) {
			response = "KO";
		}
		
		return response;
	}
	public Tienda getDatosTiendaByTiendaId(String tiendaId) {

		String query = BASE_URL_QUERY + GET_DATOS_TIENDA;
		query = String.format(query, tiendaId);
		Tienda tienda = null;
		
		String response = "";
		try {
			response = makeHttpCall(query);
		} catch (IOException ioe) {
			response = "KO";
		}
		
		if (!"KO".equals(response)) {
			if (response != null && !"".equals(response))
				tienda = (Tienda) getTiendaRowMapper().mapRow(response);
		}
		
		return tienda;
	}
	
	public List<Tienda> getTodasTiendas() {

		List<Tienda> tiendasList = null;
		String query = BASE_URL_QUERY + GET_TODAS_TIENDAS;
		
		String response = "";
		try {
			response = makeHttpCall(query);
		} catch (IOException ioe) {
			response = "KO";
		}
		
		if (!"KO".equals(response)) {
			tiendasList = new ArrayList<Tienda>();
			
			BufferedReader reader = new BufferedReader(new StringReader(response));
			try {
				String strTienda = reader.readLine();
				if (strTienda != null && !"".equals(strTienda)) {
					String[] strTiendas = strTienda.split("<br>");
					for (String strATienda: strTiendas) {
						Tienda tienda = (Tienda) getTiendaRowMapper().mapRow(strATienda);
						tiendasList.add(tienda);
					}
				}
			} catch (IOException ioe) {
			}
		}
		
		return tiendasList;
	}
	
	public Boolean hayMensajeByTiendaIdAndNumeroTelefono(String tiendaId,
			String numeroTelefono) {

		String query = BASE_URL_QUERY + HAY_MENSAJE;
		query = String.format(query, numeroTelefono, tiendaId);
		
		String response = "";
		try {
			response = makeHttpCall(query);
		} catch (IOException ioe) {
			response = "NO";
		}
		
		return "SI".equals(response)?true:false;
	}
	public List<Mensaje> getConversacionByTiendaIdAndNumeroTelefono(
			String tiendaId, String numeroTelefono) {

		List<Mensaje> mensajesList = null;
		
		String query = BASE_URL_QUERY + GET_CONVERSACION;
		query = String.format(query, numeroTelefono, tiendaId);
		
		String response = "";
		try {
			response = makeHttpCall(query);
		} catch (IOException ioe) {
			response = "KO";
		}
		
		if (!"KO".equals(response)) {
			mensajesList = new ArrayList<Mensaje>();
			
			BufferedReader reader = new BufferedReader(new StringReader(response));
			try {
				String linia = reader.readLine();
				if (linia != null && !"".equals(linia)) {
					String[] strMsgs = linia.split("<br>");
					for (String strMensaje: strMsgs) {
						Mensaje mensaje = (Mensaje) getMensajeRowMapper().mapRow(strMensaje);
						mensajesList.add(mensaje);
					}
				}
			} catch (IOException ioe) {
			}
		}
		
		return mensajesList;
	}

	public Boolean enviarConsulta(String tiendaId, String numeroTelefono, String mensaje) {
		
		String query = BASE_URL_QUERY + ENVIAR_CONSULTA;
		query = String.format(query, numeroTelefono, tiendaId, mensaje);
		
		String response = "";
		try {
			response = makeHttpCall(query);
		} catch (IOException ioe) {
			response = "KO";
		}

		return "OK".equals(response)?true:false;
	}
	
	private TiendaRowMapper getTiendaRowMapper() {
		return new TiendaRowMapper();
	}
	
	private MensajeRowMapper getMensajeRowMapper() {
		return new MensajeRowMapper(); 
	}
}
